#pragma once
#include <stdarg.h>
#include <stdio.h>
// 0为删除日志退出
// 1启动日志输出

#ifdef LOG_DEBUG_EN
/*
 *  如果不加 do ... while(0) 在进行条件判断的时候(只有一句话), 省略了{}, 就会出现语法错误
 *  if
 *     xxxxx
 *  else
 *     xxxxx
 *  宏被替换之后, 在 else 前面会出现一个 ;  --> 语法错误
 */
#define LOG(type, fmt, args...)                                                \
  do                                                                           \
  {                                                                            \
    printf("[%s] [%s/%s, line: %d] ", type, __FILE__, __FUNCTION__, __LINE__); \
    printf(fmt, ##args);                                                       \
    printf("\n");                                                              \
  } while (0)
#define LOG_DEBUG(fmt, args...) LOG("DEBUG", fmt, ##args)
#define LOG_INFO(fmt, args...) LOG("DEBUG", fmt, ##args)
#define LOG_ERROR(fmt, args...) \
  do                            \
  {                             \
    LOG("ERROR", fmt, ##args);  \
    exit(0);                    \
  } while (0)
#else
#define LOG(fmt, args...)
#define LOG_DEBUG(fmt, args...)
#define LOG_INFO(fmt, args...)
#define LOG_ERROR(fmt, args...)
#endif

/*
#pragma once
#include <stdlib.h>
#include <iostream>
// 0为删除日志退出
// 1启动日志输出

#ifndef LOG_DEBUG_EN

#define LOG(type, str)                                                \
  do                                                                           \
  {                                                                            \
    std::cout << "[" << type << "]" << " [" << __FILE__ << " -- " << __FUNCTION__ << "(), line " << __LINE__ << "] " << str << std::endl; \                                                          \
  } while (0)
#define LOG_DEBUG(str) LOG("DEBUG", str)
#define LOG_INFO(str) LOG("INFO", str)
#define LOG_ERROR(str) \
  do                            \
  {                             \
    LOG("ERROR", str);  \
    exit(0);                    \
  } while (0)
#else
#define LOG(str)
#define LOG_DEBUG(str)
#define LOG_INFO(str)
#define LOG_ERROR(str)
#endif
 */